{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression\n",
    "\n",
    "This function shows how to use TensorFlow to solve logistic regression.\n",
    "$ \\textbf{y} = sigmoid(\\textbf{A}\\times \\textbf{x} + \\textbf{b})$\n",
    "\n",
    "We will use the low birth weight data, specifically:\n",
    "```\n",
    "#  y = 0 or 1 = low birth weight\n",
    "#  x = demographic and medical history data\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import requests\n",
    "from tensorflow.python.framework import ops\n",
    "import os.path\n",
    "import csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ops.reset_default_graph()\n",
    "\n",
    "# Create graph\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtain and prepare data for modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# name of data file\n",
    "birth_weight_file = 'birth_weight.csv'\n",
    "\n",
    "# download data and create data file if file does not exist in current directory\n",
    "if not os.path.exists(birth_weight_file):\n",
    "    \n",
    "    birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/' + \\\n",
    "    'raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat'\n",
    "    birth_file = requests.get(birthdata_url)\n",
    "    birth_data = birth_file.text.split('\\r\\n')\n",
    "    birth_header = birth_data[0].split('\\t')\n",
    "    birth_data = [[float(x) for x in y.split('\\t') if len(x)>=1] for y in birth_data[1:] if len(y)>=1]\n",
    "    with open(birth_weight_file, 'w', newline='') as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerow(birth_header)\n",
    "        writer.writerows(birth_data)\n",
    "        f.close()\n",
    "\n",
    "# read birth weight data into memory\n",
    "birth_data = []\n",
    "with open(birth_weight_file, newline='') as csvfile:\n",
    "     csv_reader = csv.reader(csvfile)\n",
    "     birth_header = next(csv_reader)\n",
    "     for row in csv_reader:\n",
    "         birth_data.append(row)\n",
    "\n",
    "birth_data = [[float(x) for x in row] for row in birth_data]\n",
    "\n",
    "# Pull out target variable\n",
    "y_vals = np.array([x[0] for x in birth_data])\n",
    "# Pull out predictor variables (not id, not target, and not birthweight)\n",
    "x_vals = np.array([x[1:8] for x in birth_data])\n",
    "\n",
    "# set for reproducible results\n",
    "seed = 99\n",
    "np.random.seed(seed)\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "# Split data into train/test = 80%/20%\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]\n",
    "\n",
    "# Normalize by column (min-max norm)\n",
    "def normalize_cols(m, col_min=np.array([None]), col_max=np.array([None])):\n",
    "    if not col_min[0]:\n",
    "        col_min = m.min(axis=0)\n",
    "    if not col_max[0]:\n",
    "        col_max = m.max(axis=0)\n",
    "    return (m-col_min) / (col_max - col_min), col_min, col_max\n",
    "    \n",
    "x_vals_train, train_min, train_max = np.nan_to_num(normalize_cols(x_vals_train))\n",
    "x_vals_test, _, _ = np.nan_to_num(normalize_cols(x_vals_test, train_min, train_max))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Tensorflow computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 25\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 7], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[7,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "\n",
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)\n",
    "\n",
    "# Declare loss function (Cross Entropy loss)\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=model_output, labels=y_target))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step = my_opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.64783365\n",
      "Loss = 0.60129446\n",
      "Loss = 0.63837355\n",
      "Loss = 0.615863\n",
      "Loss = 0.561395\n"
     ]
    }
   ],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "# Actual Prediction\n",
    "prediction = tf.round(tf.sigmoid(model_output))\n",
    "predictions_correct = tf.cast(tf.equal(prediction, y_target), tf.float32)\n",
    "accuracy = tf.reduce_mean(predictions_correct)\n",
    "\n",
    "# Training loop\n",
    "loss_vec = []\n",
    "train_acc = []\n",
    "test_acc = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    temp_acc_train = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])})\n",
    "    train_acc.append(temp_acc_train)\n",
    "    temp_acc_test = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])})\n",
    "    test_acc.append(temp_acc_test)\n",
    "    if (i+1)%300==0:\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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k9hl5yujkRvDhg1jzpw5PP/88+UWxSgwdXl+URylcCZOELwVIvKbiCwRkd8yHaSqq4FzgVeBz3G8jKaLyGAROczNdhFwhohMwwmy11dLZMw79NBDk7ajHoJ8xfErm0xlzZ8/n7XWWot1112XbbfdNuNxXtmltn+uXLmSESNG1HllZGtyF5Y//viDiy66iKVLl5ZblDpNnOU411XVeqraSFWbudux1mhW1bGq2lVVN1XV6920q1R1tPv7M1XdXVW3U9XtVfW1/C6n8OTb8L3//vuxy/rmm2+yKttTCpnK/eWXX9htt92YNWtWVuVHccMNN3DWWWfx6KOPFqS8fBkzZgwikuj6X3LJJRx77LElO78phcJw5513MmzYMG666aZyi1KniTOjeXyctJqO/4veC5ndsGHDpK/wkSNH0qlTdlE//IvoFPrLOsx8tGLFisRYg8cLL7zAxIkTGTx4cEHO613Tr7/+WpDy8mXkyJEATJ06FYBbbrmFJ598sujnrWQPld9++42mTZvy6quvlluU2HjP7YoVcYctK4/Vq1fz888/l1uMvIhUCiLSxI2E2kpEWohIS/evI6mupTUev1I47LDDGDBgAMOHD0968evXr5/X8pnpGpGVK1dmfZy/p6CqDBo0iCZNmqSMlxS68crly7gUbrOFuM7ly5cjIjz88MOxj6nEnsL06dP5448/uPrqq8stSmzKZQ71k69J8KSTTqJly5aFFKnkpOspnAlMAbZw/3t/LwB3Fl+00uJ/CBo0aMDQoUNp3bp10le499B+8MEHOZ0jna3Ub2YKsmrVqtB0/0v06aefJnoC772XsnIqUL7G67HHHqNVq1ZMmTKlKOVHXVdVVRVHHXUUEydOTKT98MMPaZdA/eGHHwC48sorM57XxhQKSyU4TuR7T594ouavPxapFFR1uBsh9WJV7ayqndy/7VS1VisFP8GeQrq8mbj55psj96233nppj128OHXZimBPoVRke65x48YB8PHHHxdDnEjmz5/Ps88+y9/+9rdEWtu2bUk31yWqUViyZEmKWS5uA7J8+XJGjRqVlex1kUroKRjxBprvEJHdROQ4ETnJ+yuFcKUkjlLwHtpihK7I1LBkUgqF+Fqtrq5m//33TzTi4CwG9NFHH4XmrylfyHPnzs27jGbNmtG3b9+ktLiN10UXXUSfPn14++2385ajNlMJ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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Y76k5U/Dhg355ZdfGDZsGMOGDWPFihWsWbOG1q1b89ZbbwFwxx13MGDAANauXcuqVas466yzuPnmm3n77bcByM7O5v333+e6664L7B8gQHamUARPR3OEXX1kTjIl+UUfTK1btyY2Nta7PHv2bN544w2ysrL43//+x8aNG2nfvn2ubapVq8agQYMA6N69O99//32+/V566aXs2LGDzz//nEWLFtG1a1c2bNjAF1984V0GSE1NZevWrUV+ac+ePZsHH3wQgBEjRjB79my6dOnCkiVLuPnmm6lWrRoA9erV48CBAyQlJXH55ZcDzo1jgRg+fLh3fu3atUycOJGDBw9y+PBhBg8eDMC3337LnDlzAGdEhVq1alGrVi1q1qzJunXr2LNnDz179qRu3boBvWagLCkUwXNJqlhSMOaEVK9e3Tu/bds2/vWvf7F8+XLq1KnD6NGj/V5bX9nncxcZGVlgG3z9+vUZNWoUo0aNYuDAgfzwww+oKo899hi33HJLrrqFdR4nJiby3XffsWnTJkTEGSW5UiWeeuqpYr3XqKioXP0med+b77G44YYbWLRoER07duT111/n559/9pb5u7z0lltu4a233mL37t3cdtttxYorENZ8VAQ7UzCm9B06dIiaNWtSq1YtEhISWLx4cYn39dVXX5Genu7d765du2jevDmXXHIJb7zxBkeOHAGcu72TkpKoWbMmhw8f9ruv999/n5tvvpk9e/awe/du4uPjOe200/jpp58YMGAAM2bM8L5WcnIydevWpUGDBixcuBBwvvzT0tJo0aIFGzZsICMjgwMHDvD1118XGP+RI0do3LgxmZmZzJo1y7u+b9++3g7x7OxsDh06BMDQoUNZuHAhcXFx9O/fv8THrSCWFIpgZwrGlL5u3brRvn172rVrxw033MC5555b4n2tWLGCbt260blzZ3r37s3tt99O165dufTSS7nmmmvo1asXnTp14tprryU1NZVGjRrRvXt3OnXqxEMPPZRrX7Nnz2bIkCG51g0dOpTZs2czePBgBg4cSGxsLDExMTz33HMAzJw5k7///e907tyZPn36kJiYSKtWrbjqqqvo0KEDI0aMoFu3bgXGP2XKFHr06MG5556bq/nsxRdfZPHixXTq1InY2Fg2b94MOE1U559/PiNHjiQiCMPviKqW+k6DKTY2VleuXFlmr/f0009z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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Cross Entropy Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Cross Entropy Loss')\n",
    "plt.show()\n",
    "\n",
    "# Plot train and test accuracy\n",
    "plt.plot(train_acc, 'k-', label='Train Set Accuracy')\n",
    "plt.plot(test_acc, 'r--', label='Test Set Accuracy')\n",
    "plt.title('Train and Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
